'use strict'

class image {
    constructor() {

    }

    async post(c) {
        //! 获取answer
        let answer = c.body.answer;
        //! 根据name获取文件对象
        let f = c.getFile('image', -1);
        if (!f) {
            return c.status(400).send('image not found');
        }
        //! 根据传入的原始文件名字生成唯一文件名，主要使用原始文件f.filename的扩展名
        for (var i = 0; i < f.length; i++) {
            let imgname = c.helper.makeName(`${f[i].filename}`);
            //! 移动文件到指定位置   文件名=时间戳+answer
            await c.moveFile(f[i], `${c.service.imagePath}/${imgname}.png`);
            let id = i + Math.round((Math.random() * 100));
            //* 将信息存入数据库
            await c.service.pqorm.model('img').insert({
                imgname: `${imgname}.png`,
                answer: answer[i],
                id: id
            })
        }
    }
    // upload页面请求验证码图片进行管理  
    // 参数：0：所有图片, 1：获取字母, 2：获取算式, 3：获取诗词, 4：获取选字
    async get(c) {
        let typeId=c.param.id;
        let files = await c.service.pqorm.model('img').select('*');
        let number=[];//放入算式类验证码
        let letter=[];// 放入字母
        let poem=[];// 获取诗词
        let word=[];
        for(let i=0;i<files.length;i++){
            if(!isNaN(files[i].answer)){//如果纯数字，说明是算式
                number.push(files[i]);
            }else{
                let result = new RegExp("[A-Za-z0-9]");
                if(result.test(files[i].answer)){//检测出字母数字，说明是按图输入数字字母类
                    letter.push(files[i]);
                }else{
                    if(files[i].answer.length==1){//输入图片中的红色数组
                        word.push(files[i]);
                    }else{//输入诗词的下一句
                        poem.push(files[i]);
                    }
                }
            }
        }
        if(typeId==0){//所有图片
            c.send(JSON.stringify(files));
        }else if(typeId==1){//数字字母输入
            c.send(JSON.stringify(letter));
        }else if(typeId==2){//算式类
            c.send(JSON.stringify(number));
        }else if(typeId==3){//诗词下一句
            c.send(JSON.stringify(poem));
        }else if(typeId==4){//红字
            c.send(JSON.stringify(word));
        }
    }

    // 响应upload页面删除请求，删除某一验证码图片
    async delete(c) {
        let typeId=JSON.parse(c.body).param;
        const fs = require('fs');
        let imgname = c.param.id;
        let filePath = `${c.service.imagePath}/${imgname}`;
        fs.unlinkSync(filePath);//删除问底文件夹images中对应的验证码图片

        await c.service.pqorm.model('img').where({ imgname: `${imgname}` }).delete();
        
        let files = await c.service.pqorm.model('img').select('*');
        let number=[];//放入算式类验证码
        let letter=[];// 放入字母
        let poem=[];// 获取诗词
        let word=[];
        for(let i=0;i<files.length;i++){
            if(!isNaN(files[i].answer)){//如果纯数字，说明是算式
                number.push(files[i]);
            }else{
                let result = new RegExp("[A-Za-z0-9]");
                if(result.test(files[i].answer)){//检测出字母数字，说明是按图输入数字字母类
                    letter.push(files[i]);
                }else{
                    if(files[i].answer.length==1){//输入图片中的红色数组
                        word.push(files[i]);
                    }else{//输入诗词的下一句
                        poem.push(files[i]);
                    }
                }
            }
        }
        // 发给前端删除后的images目录，保证动态更新
        if(typeId==0){//所有图片
            c.send(JSON.stringify(files));
        }else if(typeId==1){//数字字母输入
            c.send(JSON.stringify(letter));
        }else if(typeId==2){//算式类
            c.send(JSON.stringify(number));
        }else if(typeId==3){//诗词下一句
            c.send(JSON.stringify(poem));
        }else if(typeId==4){//红字
            c.send(JSON.stringify(word));
        }
    }
}
module.exports = image;